OPCODE(noop,		1, "misc", "Performs no action, used for padding.")
OPCODE(del,			1, "gc", "Forces a collection of an object even if references remain.")
OPCODE(gc,			1, "gc", "Performs a garbage collector cycle")
OPCODE(gcp,			1, "gc", "Pauses the automatic garbage collector")
OPCODE(gcr,			1, "gc", "Resumes the automatic garbage collector")
OPCODE(call,		1, "control flow", "Calls a function")
OPCODE(tail,		1, "control flow", "Calls a function in tail position")
OPCODE(ret,			1, "control flow", "Marks the end of the function")
OPCODE(yield,		1, "control flow", "Returns a function in a resumable state.")
OPCODE(while,		1, "control flow", "Evaluates a function repeatedly while the top value is non-zero.")
OPCODE(toaux,		1, "aux", "Moves a value to the auxiliary stack from the main stack")
OPCODE(fromaux,		1, "aux", "Moves a value from the auxiliary stack to the main stack")
OPCODE(popaux,		1, "aux", "Pops a value from the auxiliary stack")
OPCODE(newobj,		1, "val", "Creates a new object (list with a vtable)")
OPCODE(tostr,		1, "val", "Converts a value to an ASCII string representation")
OPCODE(newlist,		1, "val", "Creates a new list (untyped object)")
OPCODE(isunique,	1, "val", "Returns 1 if an object is not shared")
OPCODE(vtbl,		1, "obj", "Returns an object's vtable")
OPCODE(setvtbl,		1, "obj", "Sets an object's vtable")
OPCODE(apush,		1, "array", "Pushes a value to an array")
OPCODE(apop,		1, "array", "Removes top value from an array")
OPCODE(aswap,		1, "array", "Swaps the nth value of an array with the top of the stack")
OPCODE(sget,		1, "seq", "Gets the nth value of a sequence")
OPCODE(sset,		1, "seq", "Sets the nth value of a sequence")
OPCODE(scat,		1, "seq", "Concatenates two sequences")
OPCODE(scount,		1, "seq", "Returns the number of items in a sequence")
OPCODE(sclone,		1, "seq", "Clones a sequence")
OPCODE(pop,			1, "stack", "Removes an item from the stack")
OPCODE(popN,		2, "stack", "Removes n item from the stack, where n is a byte")
OPCODE(dup,			1, "stack", "Makes a copy of the top item on the stack")
OPCODE(dupN,		1, "stack", "Makes a copy of the top n items on the stack, where n is a byte")
OPCODE(null,		1, "constants", "Pushes a null value on the stack.")
OPCODE(kbyte,		2, "constants", "Pushes the nth constant on the stack, where n is one bytes")
OPCODE(kshort,		3, "constants", "Pushes the nth constant on the stack, where n is two bytes")
OPCODE(klong,		5, "constants", "Pushes the nth constant on the stack, where n is four bytes")
OPCODE(fbyte,		2, "constants", "Pushes the nth function on the stack, where n is one byte")
OPCODE(fshort,		3, "constants", "Pushes the nth function on the stack, where n is two bytes")
OPCODE(flong,		5, "constants", "Pushes the nth function on the stack, where n is four bytes")
OPCODE(byte,		2, "constants", "Pushes the next byte as an integer on the stack")
OPCODE(short,		3, "constants", "Pushes the next two bytes as an integer on the stack")
OPCODE(long,		5, "constants", "Pushes the next four bytes as an integer on the stack")
OPCODE(float,		5, "constants", "Pushes the next four bytes as a constant float on the stack")
OPCODE(double,		9, "constants", "Pushes the next eight bytes as a constant double on the stack")
OPCODE(getN,		2, "stack", "Copies the nth value from the stack and pushes it on top")
OPCODE(setN,		2, "stack", "Replaces the nth value on the stack with the top value")
OPCODE(swap,		1, "stack", "Swaps the top two values on the stack")
OPCODE(swapN,		2, "stack", "Swaps the top value on the stack with the nth value")
OPCODE(swapNM,		3, "stack", "Swaps the nth value with the mth value on the stack")
OPCODE(buryN,		2, "stack", "Moves the top value to underneath the nth value")
OPCODE(digN,		2, "stack", "Moves the nth value to the top of the stack")
OPCODE(inc,			1, "arithmetic", "Increments am integer")
OPCODE(dec,			1, "arithmetic", "Decrements an integer")
OPCODE(add,			1, "arithmetic", "Addition operation")
OPCODE(sub,			1, "arithmetic", "Subtraction operation")
OPCODE(mul,			1, "arithmetic", "Multiplication operation")
OPCODE(div,			1, "arithmetic", "Division operation")
OPCODE(mod,			1, "arithmetic", "Modulo operation")
OPCODE(neg,			1, "arithmetic", "Unary negation operation")
OPCODE(inv,			1, "arithmetic", "Inverse operation")
OPCODE(abs,			1, "arithmetic", "Absolute value")
OPCODE(shl,			1, "bits", "Shift left")
OPCODE(shr,			1, "bits", "Shift right")
OPCODE(or,			1, "bits", "Bitwise or")
OPCODE(and,			1, "bits", "Bitwise and")
OPCODE(xor,			1, "bits", "Bitwise xor")
OPCODE(compl,		1, "bits", "Bit complement")
OPCODE(not,			1, "bits", "Unary boolean negation operation")
OPCODE(isnull,		1, "comparison", "Unary boolean operation, pushes 1 if top value is null, 0 otherwise")
OPCODE(gt,			1, "comparison", "Greather than operation")
OPCODE(lt,			1, "comparison", "Less than operation")
OPCODE(gteq,		1, "comparison", "Greater than or equal to operation")
OPCODE(lteq,		1, "comparison", "Less than or equal to operation")
OPCODE(eq,			1, "comparison", "Equal operation")
OPCODE(neq,			1, "comparison", "Not equal to operation")
OPCODE(vcpy,		1, "vector", "Creates a copy of a vector")
OPCODE(vclr,		1, "vector", "Sets all values of a vector to zero.")
OPCODE(vbyte,		1, "vector", "Creates a new vector of bytes")
OPCODE(vint,		1, "vector", "Creates a new vector of integers")
OPCODE(vflt,		1, "vector", "Creates a new vector of floats")
OPCODE(vdbl,		1, "vector", "Creates a new vector of doubles")
OPCODE(if,			1, "control flow", "Pops the third value, if the top value is a non-zero int, otherwise pops the second value")
OPCODE(ift,			1, "control flow", "Calls a function, if the top value is non-zero")
OPCODE(trycatch,	1, "control flow", "Utilizes top function as an exception 'catch' handler, while executing next function")
OPCODE(throw,		1, "control flow", "Throws an exception")
OPCODE(contnew,		1, "control flow", "Creates a new continuation")
OPCODE(store,		1, "store", "Creates a new global store. The function on top of the stack is used as a callback when the store is restored, the function below that is called just after the store is created.")
OPCODE(restore,		1, "store", "Given a global store, sets the VM to the given state")
OPCODE(tblnew,		1, "table", "Creates a new table")
OPCODE(tbladd,		1, "table", "Adds a value to a table using a specific key")
OPCODE(tblfind,		1, "table", "Finds a value in a table, pushing NULL if not existing")
OPCODE(typeof,		1, "types", "Type id of a value")
OPCODE(typeint,		1, "types", "Type id of an int")
OPCODE(typebyte,	1, "types", "Type id of a byte")
OPCODE(typeflt,		1, "types", "Type id of a float")
OPCODE(typedbl,		1, "types", "Type id of a double")
OPCODE(typevbyte,	1, "types", "Type id of a vector of bytes")
OPCODE(typevint,	1, "types", "Type id of a vector of ints")
OPCODE(typevflt,	1, "types", "Type id of a vector of floats")
OPCODE(typevdbl,	1, "types", "Type id of a vector of doubles")
OPCODE(typeobj,		1, "types", "Type id of an object")
OPCODE(typefunc,	1, "types", "Type id of a function")
OPCODE(typeffi,		1, "types", "Type id of a native function")
OPCODE(typeprim,	1, "types", "Whether a type is a primitive")
OPCODE(papply,		1, "functions", "Binds an argument to a function.")
OPCODE(newfunc,		1, "functions", "Creates a function that does nothing")
OPCODE(quote,		1, "functions", "Creates a function that pushes a value on a stack")
OPCODE(compose,		1, "functions", "Composes two functions.")
OPCODE(pair,		1, "pair", "Creates a pair of items.")
OPCODE(first,		1, "pair", "Returns first item of a pair.")
OPCODE(second,		1, "pair", "Returns second item of a pair.")
#undef OPCODE
